;$(function(){
    $('input[dname=ck_auto]').on('change', setAutoInput);
    $('#form_test').on('submit', formSubmit);
    $('#but_change_utf8').on('click', function () {
        var v = $('#utf8_value').val();
        $('#utf8_value_result').val(UnUnicode(v));
    });
    $('#but_change_base64').on('click', function () {
        var v = $('#base64_value').val();
        var parsedWordArray = CryptoJS.enc.Base64.parse(v);
        var parsedStr = parsedWordArray.toString(CryptoJS.enc.Utf8);
        $('#base64_value_result').val(parsedStr);
    });
});
function UnUnicode(str)
{
    return unescape(str.replace(/\\/g, "%"));
}
if(typeof(console) == 'undefined') {
    console = {
        'log' : function(){}
    };
}
/**
 * 生成随机字符串
 * @param length
 * @returns {string}
 */
function randomString(length) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
    if (!length) {
        length = Math.floor(Math.random() * chars.length);
    }
    var str = '';
    for (var i = 0; i < length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str;
}
/**
 * 设置自动输入的开关
 */
function setAutoInput() {
    var obj = $(this);
    var inp = $(obj.attr('did'));
    if(obj.prop('checked')) {
        inp.prop('readonly', true);
    } else {
        inp.prop('readonly', false);
    }
}
/**
 * 生成签名
 * @returns {string}
 */
function createSign() {
    var p = [
        'secret_token',
        'access_token',
        'user_token',
        'once',
        'timestamp',
        'attach',
        'version',
        'format',
        'method',
        'post_body'
    ];
    p.sort();
    console.log(p);
    var params = [];
    for(var i = 0; i < p.length; i++) {
        var v = $('#' + p[i]).val();
        if(v != "") {
            var s = p[i] + '=' + v;
            params.push(s);
        }
    }
    console.log(params);
    var signStr = params.join('&');
    console.log(signStr);
    return CryptoJS.MD5(signStr);
}
/**
 * 提交表单数据处理
 * @returns {boolean}
 */
function formSubmit() {
    // 设置请求方法
    var apiMethod = $('#api_method').val();
    if(!apiMethod) {
        alert('请选择API Method.');
        return false;
    }
    $(this).attr('action', apiMethod);
    // 随机字符串
    if($('#once_auto').prop('checked')) {
        $('#once').val(randomString(12));
    }
    //时间戳
    if($('#timestamp_auto').prop('checked')) {
        $('#timestamp').val($.now());
    }
    // base64 content
    //$('#content').val(CryptoJS.enc.Utf8.parse($('#box_content').val()).toString(CryptoJS.enc.Base64));
	$('#post_body').val($('#box_content').val());
    // 生成签名
    if($('#sign_auto').prop('checked')) {
        $('#sign').val(createSign());
    }
	var p = [
		'access_token',
		'user_token',
		'once',
		'timestamp',
		'attach',
		'version',
		'format',
		'method',
		'sign_type',
		'sign',
        'post_body'
	];
	var params = {};
	for(var i = 0; i < p.length; i++) {
		var v = $('#' + p[i]).val();
		if(v != "") {
			//var s = p[i] + '=' + v;
			params[p[i]] = v;
		}
	}
	var $url = apiMethod;
	console.log($url);
	//$('#box_result').val('');
	/*$.post($url, params, function(data){
		console.log(data);
		$('#box_result').val(data);
	}, 'html');*/
    return true;
}
/*
 access_token	Y	访问接口授权令牌
 user_token	N	登录用户的授权令牌
 timestamp	Y	发起请求时的时间戳
 once	Y	随机字符串，保证每次请求都不一样
 attach	N	附带请求参数，API服务不做任何处理，原值返回
 format	N	返回数据格式，默认为JSON，可选择：JSON、XML
 method	Y	接口方法名称
 sign_type	N	签名方式，默认MD5
 sign	Y	签名字符串，签名方式见：【接口请求规则请求签名】
 version	N	请求接口版本号，默认为1.0.1

 $params = [
 'secret_token' => '系统分配的secret_token值',
 'access_token' => '系统分配的access_token值',
 'once' => '随机字符串',
 'timestamp' => 时间戳,
 'attach' => '附带请求参数',
 'version' => '0.1',
 'format' => 'JSON',
 'content' => '业务参数的base64编码值',
 ];
 ksort($params);
 $formatData = array();
 foreach($params as $k=>$v) {
 if(!empty($v) && $k != 'sign'  && $k != 'sign_type') {
 $formatData[] = "$k=$v";
 }
 }
 $signStr = implode('&', $formatData);
 unset($k, $v, $formatData);
 $sign = md5($signStr);
 api_method
 access_token	系统分配的访问令牌
 once	随机字符串
 timestamp	发起请求时的时间戳
 attach	附带请求参数，API不做任何处理，原值返回，可为空
 version	当前使用的接口版本号，默认：0.1
 format	返回数据的格式，现在支持： JSON
 sign_type	签名方式，现在支持：MD5
 sign	签名，签名方式见：【1.4.1. 请求签名】
 content	此次请求的业务参数的base64编码值，具体内容在相关业务中会有说明

 //var hash = CryptoJS.MD5("Message");
 //console.log(hash)
 //var words  = CryptoJS.enc.Base64.parse('SGVsbG8sIFdvcmxkIQ==');
 //var base64 = CryptoJS.enc.Base64.stringify(words);
 CryptoJS.enc.Utf8.parse("中文呢").toString(CryptoJS.enc.Base64)
 */